/*
* INSANE - Interactive Structural Analysis Environment
*
* Copyright (C) 2003-2005
* Universidade Federal de Minas Gerais
* Escola de Engenharia
* Departamento de Engenharia de Estruturas
* 
* Author's email :    insane@dees.ufmg.br
* Author's website :  http://www.dees.ufmg.br/insane
* 
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or any later version.
* 
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
* 
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
*/
package br.ufmg.dees.insane.materialMedia.material;

import java.awt.Color;
import java.util.HashMap;

import br.ufmg.dees.insane.util.IMatrix;

/**
 *A class representing Material.<p>
 *
 *@author CENOURA!!!
 *@version 1.0
 *@since 04/05/2005
 */
public interface Material {

    /** Returns the label of this Material.
	*@return a The label of this Material.
	*/
	public abstract String getLabel()
	;
	
	
	/** Sets the label of this Material.
	*@param m The label of this Material.
	*/
	public abstract void setLabel(String m)
	;
	

	public abstract Color getColor()
	;
	
	public abstract void setColor(Color color);
    
    /** Returns the material values.
       * @return The material values.
       */
    public HashMap getMaterialValues();
	
	/** Returns the material value.
	   * @param key The key of the material value.
	   * @return The material value.
	   */
	  public abstract Double getMaterialValues(String key);
	  
	  /** Returns true if the material has the material values for the key.
	   * @param key The key of the material values.
	   * @return True if the material has the material values for the key.
	   */
	  public abstract boolean materialValuesContainsKey(String key);
	  
	  /** Sets a material value at a key of material Values.
	   * @param key The key to set the material values.
	   * @param pv The material values to set.
	   */
	  public abstract void setMaterialValues(String key, double d);
	
    /** Returns a matrix with the tangent material properties at zero internal variable.
	*@return a matrix with the tangent material properties at zero internal variable.
	*/
	public abstract IMatrix getPt()
	;
	/** Returns a matrix with the tangent material properties at the informed internal variable e
	* @param e a matrix representing the material point internal variable.
	* @return a matrix with the tangent material properties at the informed internal variable e.
	*/
	public abstract IMatrix getPt(IMatrix e)
	;
	/** Returns the element 0,0 of material properties matrix of this Material.
	*@return The element 0,0 of material properties matrix of this Material.
	*/
	public abstract double getPt11(double e11)
	;
	/** Returns the element 0,1 of material properties matrix of this Material.
	*@return The element 0,1 of material properties matrix of this Material.
	*/
	public abstract double getPt12(double e12)
	;
	/** Returns the element 0,2 of material properties matrix of this Material.
	*@return The element 0,2 of material properties matrix of this Material.
	*/
	public abstract double getPt13(double e13)
	;
	/** Returns the element 0,3 of material properties matrix of this Material.
	*@return The element 0,3 of material properties matrix of this Material.
	*/
	public abstract double getPt14(double e14)
	;
	/** Returns the element 0,4 of material properties matrix of this Material.
	*@return The element 0,4 of material properties matrix of this Material.
	*/
	public abstract double getPt15(double e15)
	;
	/** Returns the element 0,5 of material properties matrix of this Material.
	*@return The element 0,5 of material properties matrix of this Material.
	*/
	public abstract double getPt16(double e16)
	;
	/** Returns the element 1,0 of material properties matrix of this Material.
	*@return The element 1,0 of material properties matrix of this Material.
	*/
	public abstract double getPt21(double e21)
	;
	/** Returns the element 1,1 of material properties matrix of this Material.
	*@return The element 1,1 of material properties matrix of this Material.
	*/
	public abstract double getPt22(double e22)
	;
	/** Returns the element 1,2 of material properties matrix of this Material.
	*@return The element 1,2 of material properties matrix of this Material.
	*/
	public abstract double getPt23(double e23)
	;
	/** Returns the element 1,3 of material properties matrix of this Material.
	*@return The element 1,3 of material properties matrix of this Material.
	*/
	public abstract double getPt24(double e24)
	;
	/** Returns the element 1,4 of material properties matrix of this Material.
	*@return The element 1,4 of material properties matrix of this Material.
	*/
	public abstract double getPt25(double e25)
	;
	/** Returns the element 1,5 of material properties matrix of this Material.
	*@return The element 1,5 of material properties matrix of this Material.
	*/
	public abstract double getPt26(double e26)
	;
	/** Returns the element 2,0 of material properties matrix of this Material.
	*@return The element 2,0 of material properties matrix of this Material.
	*/
	public abstract double getPt31(double e31)
	;
	/** Returns the element 2,1 of material properties matrix of this Material.
	*@return The element 2,1 of material properties matrix of this Material.
	*/
	public abstract double getPt32(double e32)
	;
	/** Returns the element 2,2 of material properties matrix of this Material.
	*@return The element 2,2 of material properties matrix of this Material.
	*/
	public abstract double getPt33(double e33)
	;
	/** Returns the element 2,3 of material properties matrix of this Material.
	*@return The element 2,3 of material properties matrix of this Material.
	*/
	public abstract double getPt34(double e34)
	;
	/** Returns the element 2,4 of material properties matrix of this Material.
	*@return The element 2,4 of material properties matrix of this Material.
	*/
	public abstract double getPt35(double e35)
	;
	/** Returns the element 2,5 of material properties matrix of this Material.
	*@return The element 2,5 of material properties matrix of this Material.
	*/
	public abstract double getPt36(double e36)
	;
	/** Returns the element 3,0 of material properties matrix of this Material.
	*@return The element 3,0 of material properties matrix of this Material.
	*/
	public abstract double getPt41(double e41)
	;
	/** Returns the element 3,1 of material properties matrix of this Material.
	*@return The element 3,1 of material properties matrix of this Material.
	*/
	public abstract double getPt42(double e42)
	;
	/** Returns the element 3,2 of material properties matrix of this Material.
	*@return The element 3,2 of material properties matrix of this Material.
	*/
	public abstract double getPt43(double e43)
	;
	/** Returns the element 3,3 of material properties matrix of this Material.
	*@return The element 3,3 of material properties matrix of this Material.
	*/
	public abstract double getPt44(double e44)
	;
	/** Returns the element 3,4 of material properties matrix of this Material.
	*@return The element 3,4 of material properties matrix of this Material.
	*/
	public abstract double getPt45(double e45)
	;
	/** Returns the element 3,5 of material properties matrix of this Material.
	*@return The element 3,5 of material properties matrix of this Material.
	*/
	public abstract double getPt46(double e46)
	;
	/** Returns the element 4,0 of material properties matrix of this Material.
	*@return The element 4,0 of material properties matrix of this Material.
	*/
	public abstract double getPt51(double e51)
	;
	/** Returns the element 4,1 of material properties matrix of this Material.
	*@return The element 4,1 of material properties matrix of this Material.
	*/
	public abstract double getPt52(double e52)
	;
	/** Returns the element 4,2 of material properties matrix of this Material.
	*@return The element 4,2 of material properties matrix of this Material.
	*/
	public abstract double getPt53(double e53)
	;
	/** Returns the element 4,3 of material properties matrix of this Material.
	*@return The element 4,3 of material properties matrix of this Material.
	*/
	public abstract double getPt54(double e54)
	;
	/** Returns the element 4,4 of material properties matrix of this Material.
	*@return The element 4,4 of material properties matrix of this Material.
	*/
	public abstract double getPt55(double e55)
	;
	/** Returns the element 4,5 of material properties matrix of this Material.
	*@return The element 4,5 of material properties matrix of this Material.
	*/
	public abstract double getPt56(double e56)
	;
	/** Returns the element 5,0 of material properties matrix of this Material.
	*@return The element 5,0 of material properties matrix of this Material.
	*/
	public abstract double getPt61(double e61)
	;
	/** Returns the element 5,1 of material properties matrix of this Material.
	*@return The element 5,1 of material properties matrix of this Material.
	*/
	public abstract double getPt62(double e62)
	;
	/** Returns the element 5,2 of material properties matrix of this Material.
	*@return The element 5,2 of material properties matrix of this Material.
	*/
	public abstract double getPt63(double e63)
	;
	/** Returns the element 5,3 of material properties matrix of this Material.
	*@return The element 5,3 of material properties matrix of this Material.
	*/
	public abstract double getPt64(double e64)
	;
	/** Returns the element 5,4 of material properties matrix of this Material.
	*@return The element 5,4 of material properties matrix of this Material.
	*/
	public abstract double getPt65(double e65)
	;
	/** Returns the element 5,5 of material properties matrix of this Material.
	*@return The element 5,5 of material properties matrix of this Material.
	*/
	public abstract double getPt66(double e66)
	;
		
	/** Returns a matrix with the secant material properties at zero internal variable.
	*@return a matrix with the secant material properties at zero internal variable.
	*/
	public abstract IMatrix getPs()
	;

	/** Returns a matrix with the secant material properties at the informed internal variable e
	* @param e a matrix representing the material point internal variable.
	* @return a matrix with the secant material properties at the informed internal variable e.
	*/
	public abstract IMatrix getPs(IMatrix e)
	;

	/** Returns the element of material properties matrix of this Material.
	*@return The element of material properties matrix of this Material.
	*/
	public abstract double getPs11(double e11)
	;
	/** Returns the element of material properties matrix of this Material.
	*@return The element of material properties matrix of this Material.
	*/
	public abstract double getPs12(double e12)
	;
	/** Returns the element of material properties matrix of this Material.
	*@return The element of material properties matrix of this Material.
	*/
	public abstract double getPs13(double e13)
	;
	/** Returns the element of material properties matrix of this Material.
	*@return The element of material properties matrix of this Material.
	*/
	public abstract double getPs14(double e14)
	;
	/** Returns the element of material properties matrix of this Material.
	*@return The element of material properties matrix of this Material.
	*/
	public abstract double getPs15(double e15)
	;
	/** Returns the element of material properties matrix of this Material.
	*@return The element of material properties matrix of this Material.
	*/
	public abstract double getPs16(double e16)
	;
	/** Returns the element of material properties matrix of this Material.
	*@return The element of material properties matrix of this Material.
	*/
	public abstract double getPs21(double e21)
	;
	/** Returns the element of material properties matrix of this Material.
	*@return The element of material properties matrix of this Material.
	*/
	public abstract double getPs22(double e22)
	;
	/** Returns the element of material properties matrix of this Material.
	*@return The element of material properties matrix of this Material.
	*/
	public abstract double getPs23(double e23)
	;
	/** Returns the element of material properties matrix of this Material.
	*@return The element of material properties matrix of this Material.
	*/
	public abstract double getPs24(double e24)
	;
	/** Returns the element of material properties matrix of this Material.
	*@return The element of material properties matrix of this Material.
	*/
	public abstract double getPs25(double e25)
	;
	/** Returns the element of material properties matrix of this Material.
	*@return The element of material properties matrix of this Material.
	*/
	public abstract double getPs26(double e26)
	;
	/** Returns the element of material properties matrix of this Material.
	*@return The element of material properties matrix of this Material.
	*/
	public abstract double getPs31(double e31)
	;
	/** Returns the element of material properties matrix of this Material.
	*@return The element of material properties matrix of this Material.
	*/
	public abstract double getPs32(double e32)
	;
	/** Returns the element of material properties matrix of this Material.
	*@return The element of material properties matrix of this Material.
	*/
	public abstract double getPs33(double e33)
	;
	/** Returns the element of material properties matrix of this Material.
	*@return The element of material properties matrix of this Material.
	*/
	public abstract double getPs34(double e34)
	;
	/** Returns the element of material properties matrix of this Material.
	*@return The element of material properties matrix of this Material.
	*/
	public abstract double getPs35(double e35)
	;
	/** Returns the element of material properties matrix of this Material.
	*@return The element of material properties matrix of this Material.
	*/
	public abstract double getPs36(double e36)
	;
	/** Returns the element of material properties matrix of this Material.
	*@return The element of material properties matrix of this Material.
	*/
	public abstract double getPs41(double e41)
	;
	/** Returns the element of material properties matrix of this Material.
	*@return The element of material properties matrix of this Material.
	*/
	public abstract double getPs42(double e42)
	;
	/** Returns the element of material properties matrix of this Material.
	*@return The element of material properties matrix of this Material.
	*/
	public abstract double getPs43(double e43)
	;
	/** Returns the element of material properties matrix of this Material.
	*@return The element of material properties matrix of this Material.
	*/
	public abstract double getPs44(double e44)
	;
	/** Returns the element of material properties matrix of this Material.
	*@return The element of material properties matrix of this Material.
	*/	
	public abstract double getPs45(double e45)
	;
	/** Returns the element of material properties matrix of this Material.
	*@return The element of material properties matrix of this Material.
	*/
	public abstract double getPs46(double e46)
	;
	/** Returns the element of material properties matrix of this Material.
	*@return The element of material properties matrix of this Material.
	*/
	public abstract double getPs51(double e51)
	;
	/** Returns the element of material properties matrix of this Material.
	*@return The element of material properties matrix of this Material.
	*/
	public abstract double getPs52(double e52)
	;
	/** Returns the element of material properties matrix of this Material.
	*@return The element of material properties matrix of this Material.
	*/
	public abstract double getPs53(double e53)
	;
	/** Returns the element of material properties matrix of this Material.
	*@return The element of material properties matrix of this Material.
	*/
	public abstract double getPs54(double e54)
	;
	/** Returns the element of material properties matrix of this Material.
	*@return The element of material properties matrix of this Material.
	*/
	public abstract double getPs55(double e55)
	;
	/** Returns the element of material properties matrix of this Material.
	*@return The element of material properties matrix of this Material.
	*/
	public abstract double getPs56(double e56)
	;
	/** Returns the element of material properties matrix of this Material.
	*@return The element of material properties matrix of this Material.
	*/
	public abstract double getPs61(double e61)
	;
	/** Returns the element of material properties matrix of this Material.
	*@return The element of material properties matrix of this Material.
	*/
	public abstract double getPs62(double e62)
	;
	/** Returns the element of material properties matrix of this Material.
	*@return The element of material properties matrix of this Material.
	*/
	public abstract double getPs63(double e63)
	;
	/** Returns the element of material properties matrix of this Material.
	*@return The element of material properties matrix of this Material.
	*/
	public abstract double getPs64(double e64)
	;
	/** Returns the element of material properties matrix of this Material.
	*@return The element of material properties matrix of this Material.
	*/
	public abstract double getPs65(double e65)
	;
	/** Returns the element of material properties matrix of this Material.
	*@return The element of material properties matrix of this Material.
	*/
	public abstract double getPs66(double e66)
	;
	/** Returns the matrix with the material properties for unloading path of this Material at the informed internal variable e.
	*@return a The matrix with the material properties for unloading path of this Material at the informed internal variable e.
	*/
	public abstract IMatrix getUnload(IMatrix e)
	;
	/** Returns the matrix with the material properties for unloading path of this Material at zero internal variable e.
	*@return a The matrix with the material properties for unloading path of this Material at zero internal variable e.
	*/
	public abstract IMatrix getUnload()
	;
	
	
}
